import i18n from '@/locale'

let validator = {
}

// 字符
validator.checkNotEmpty = (rule, value, callback) => {
  if (rule.required) {
    if (value && value.replace(/^\s+|\s+$/gm, '') !== '') {
      return callback()
    }
    return callback(new Error(rule.message))
  }
  return callback()
}

// 号码校验
validator.checkPhone = (rule, value, callback, str) => {
  if (!value && rule.required) {
    return callback(new Error(i18n.t('not_null')))
  } else if (value) {
    let rules = [
      /^(|\(\d{4}\)|\d{4}\-)\d{7,8}$/, // 座机的 如，5245892、(0557)5245892、0557-5245892
      // /^1\d{2,}$/, // 数字号码， 10086，等
      /^(|\(\+\d{2}\))1\d{10}$/ // 国际电话 (+86)1866662748
    ]
    let passed = false
    rules.forEach((item) => {
      if (item.test(value)) {
        return passed = true
      }
    })
    if (passed) {
      return callback()
    } else {
      let msg = rule.message ? rule.message : i18n.t('check_phone')
      return callback(new Error(msg))
    }
  } else {
    return callback()
  }
}

// 数字校验
validator.checkNumber = (rule, value, callback, message) => {
  if (!value && value !== 0 && rule.required) {
    callback(new Error(message))
  } else if (value) {
    if (!isNaN(Number(value))) {
      callback()
    } else {
      callback(new Error(i18n.t('please_input_number')))
    }
  } else {
    callback()
  }
}

// 正数校验
validator.checkPositive = (rule, value, callback, message) => {
  if (!value && value !== 0 && rule.required) {
    callback(new Error(message))
  } else if (value) {
    if (!isNaN(Number(value)) && Number(value) >= 0) {
      callback()
    } else {
      callback(new Error(i18n.t('please_input_positive')))
    }
  } else {
    callback()
  }
}

// 正整数校验
validator.checkInteger = (rule, value, callback, message) => {
  if (!value && value !== 0 && rule.required) {
    callback(new Error(message))
  } else if (value) {
    if (!isNaN(Number(value)) && Number(value) % 1 === 0 && Number(value) > 0) {
      callback()
    } else {
      callback(new Error(i18n.t('please_input_integer')))
    }
  } else {
    callback()
  }
}

// ip 地址校验
validator.checkIp = (rule, value, callback) => {
  if (!value && rule.required) {
    return callback(new Error(i18n.t('this_item') + i18n.t('not_null')))
  } else if (value) {
    let ipReg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
    if (ipReg.test(value)) {
      return callback()
    } else {
      return callback(new Error(i18n.t('check_ip')))
    }
  } else {
    return callback()
  }
}

// 域名校验
validator.checkDomain = (rule, value, callback) => {
  if (!value && rule.required) {
    return callback(new Error(i18n.t('this_item') + i18n.t('not_null')))
  } else if (value) {
    let ipReg = /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/
    if (ipReg.test(value)) {
      return callback()
    } else {
      return callback(new Error(i18n.t('check_url')))
    }
  } else {
    return callback()
  }
}

// 经度，整数部分为0-180小数部分为0到6位
validator.checkLongitude = (rule, value, callback) => {
  if (!value && rule.required) {
    return callback(new Error(i18n.t('this_item') + i18n.t('not_null')))
  } else if (value) {
    let longitudeReg = /^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,6})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,6}|180)$/
    if (longitudeReg.test(value)) {
      return callback()
    } else {
      return callback(new Error(rule.message))
    }
  } else {
    return callback()
  }
}

// 纬度，整数部分为0-180小数部分为0到6位
validator.checkLatitude = (rule, value, callback) => {
  if (!value && rule.required) {
    return callback(new Error(i18n.t('this_item') + i18n.t('not_null')))
  } else if (value) {
    let latitudeReg = /^(\-|\+)?([0-8]?\d{1}\.\d{0,6}|90\.0{0,6}|[0-8]?\d{1}|90)$/
    if (latitudeReg.test(value)) {
      return callback()
    } else {
      return callback(new Error(rule.message))
    }
  } else {
    return callback()
  }
}

// 校验车牌号
validator.checkCarNumber = (rule, value, callback) => {
  if (!value && rule.required) {
    return callback(new Error(i18n.t('this_item') + i18n.t('not_null')))
  } else if (value) {
    let carNumberReg = /([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1})/
    if (carNumberReg.test(value)) {
      return callback()
    } else {
      if (rule.message) {
        return callback(new Error(rule.message))
      } else {
        return callback(new Error('车牌号格式错误'))
      }
    }
  } else {
    return callback()
  }
}

// 校验金额
validator.checkMoney = (rule, value, callback) => {
  if (value == 0) {
    return callback()
  } else if (!value && rule.required) {
    return callback(new Error(i18n.t('this_item') + i18n.t('not_null')))
  } else if (value) {
    // @bugFixed 修改金额校验规则，小数点前为10位，小数点后为2位，原校验规则会导致超过位数，数字后面都是0，已经出错，不提示错误信息，限制前面为10位数
    let pattern = /(^[1-9]([0-9]{0,9})?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
    if (pattern.test(value)) {
      return callback()
    } else {
      if (rule.message) {
        return callback(new Error(rule.message))
      }
    }
  }
}

validator.checkEmail = (rule, value, callback) => {
  var reg = new RegExp('^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$') // 正则表达式
  var obj = document.getElementById('mazey') // 要验证的对象
  if (obj.value === '') { // 输入不能为空
    alert('输入不能为空!')
    return false
  } else if (!reg.test(obj.value)) { // 正则验证不通过，格式不对
    alert('验证不通过!')
    return false
  } else {
    alert('通过！')
    return true
  }
}

export default validator
